package cn.dglydrpy.study.ssm.common.zookeeper.curator;

import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
/**
 * curator是Netflix公司开源的一套Zookeeper客户端框架，和ZKClient⼀样，Curator解决了很多
Zookeeper客户端非常底层的细节开发工作，包括连接重连，反复注册Watcher和
NodeExistsException异常等，是最流行的Zookeeper客户端之一。从编码风格上来讲，它提供了基于
Fluent的编程风格(builder和链式调用)支持
 *
 */
public class CreateSession {

    // 创建会话
    public static void main(String[] args) {


        //不使用fluent编程风格

    	// ExponentialBackoffRetry（基于backoff的重连策略）
    	// RetryNTimes（重连N次策略）
    	// RetryForever（永远重试策略）
        RetryPolicy exponentialBackoffRetry = new ExponentialBackoffRetry(1000, 3);
        // ExponentialBackoffRetry：构造器含有三个参数 ExponentialBackoffRetry(int baseSleepTimeMs, int maxRetries, int maxSleepMs)
        // baseSleepTimeMs：初始的sleep时间，用于计算之后的每次重试的sleep时间，
        //   计算公式：当前sleep时间=baseSleepTimeMs*Math.max(1,random.nextInt(1<<(retryCount+1)))
        // maxRetries：最大重试次数
        // maxSleepMs：最大sleep时间，如果上述的当前sleep计算出来比这个大，那么sleep用这个时间，默认的最大时间是Integer.MAX_VALUE毫秒
        CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient("192.168.80.128:2181", exponentialBackoffRetry);
        curatorFramework.start();
        System.out.println( "会话被建立了");

        // 使用fluent编程风格
        CuratorFramework client = CuratorFrameworkFactory.builder()
        		// connectString：zk的server地址，多个server之间使用英文逗号分隔开
                .connectString("192.168.80.128:2181")
                // sessionTimeoutMs：会话超时时间，默认是60s
                .sessionTimeoutMs(50000)
                // connectionTimeoutMs：连接超时时间，默认是15s
                .connectionTimeoutMs(30000)
                .retryPolicy(exponentialBackoffRetry)
                // 客户端对Zookeeper上数据节点的任何操作都是相对/base⽬录进⾏的，这有利于实现不同的Zookeeper的业务之间的隔离
                .namespace("base")  // 独立的命名空间 /base
                .build();

        client.start();

        System.out.println("会话2创建了");
    }


}
